The most common memory leaks in Go are goroutine leaks, unbounded caches, unclosed HTTP response bodies, and keeping references to large backing arrays via sub-slices.
Goroutine leaks: blocked goroutines hold their stack and all referenced heap objects alive forever
Unbounded global maps or caches that only grow — add a size limit or TTL eviction
time.After inside loops: each call creates a new channel and timer that leaks until it fires
Unclosed HTTP response bodies: resp.Body.Close() must be called even when not reading the body
Sub-slice keeping large array alive: a small slice of a large array prevents the whole array from being GC'd
CGo retained pointers: C code holding Go pointers prevents GC collection